package util;

import generated.EnvT;
import generated.ObjectFactory;
import generated.SolFab;
import generated.SolFab.Articulos;
import generated.SolFab.Articulos.ArticuloFabrica;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import bean.EnvioTienda;
import bean.PendienteFabricacion;

public class XMLWriter {

	private static XMLWriter instance = null;
	static Logger logger = Logger.getLogger(XMLWriter.class);

	private XMLWriter() {

	}

	public static XMLWriter getInstance() {
		if (instance == null) {
			instance = new XMLWriter();
		}
		return instance;
	}

	public void writeSolFabr(List<PendienteFabricacion> listaFabricacion,
			int idCentro, int idFab, int numSolFab) {
		try {
			JAXBContext jc = JAXBContext.newInstance("generated");
			Marshaller marshaller = jc.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
			ObjectFactory objectFactory = new ObjectFactory();
			SolFab solFab = objectFactory.createSolFab();
			Articulos lista = new Articulos();
			List<ArticuloFabrica> listaReal = new ArrayList<SolFab.Articulos.ArticuloFabrica>();

			solFab.setIdCentro(idCentro);
			solFab.setIdFabrica(idFab);
			solFab.setNumSolFab(numSolFab);
			for (PendienteFabricacion p : listaFabricacion) {
				ArticuloFabrica art = new ArticuloFabrica();
				art.setRef(p.getReferencia());
				art.setCant(p.getCantPendiente());
				listaReal.add(art);
			}
			lista.setArticuloFabrica(listaReal);
			solFab.setArticulos(lista);

			marshaller.marshal(solFab, System.out);
			String path = System.getProperty("user.home");
			marshaller.marshal(solFab, new File(path+"/SolFabr.xml"));
			logger.log(Level.INFO, "Solicitud de fabricacion creada");

		} catch (JAXBException e) {
			e.printStackTrace();
			logger.log(Level.ERROR, "Error en el XML", e);
		}

	}

	public void writeEnvT(int numEnvt, int idCentro, int idTienda,
			int numSolDist, int numPalc, List<EnvioTienda> listaEnvios) {
		try {

			// genera xml para una solicitud de distribucion de una
			// determinada tienda
			JAXBContext jc = JAXBContext.newInstance("generated");
			Marshaller marshaller = jc.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
			ObjectFactory objectFactory = new ObjectFactory();
			EnvT envT = objectFactory.createEnvT();

			envT.setIdCentro(idCentro);// asumo numero de grupo
			envT.setNumPalc(numPalc);// no se
			envT.setNumSolDist(numSolDist);
			envT.setNumEnvT(numEnvt);
			envT.setIdTienda(idTienda);

			List<EnvT.Articulos.ArticuloAEnviar> articuloAEnviar = new ArrayList<EnvT.Articulos.ArticuloAEnviar>();

			for (EnvioTienda e : listaEnvios) {
				EnvT.Articulos.ArticuloAEnviar artE = new EnvT.Articulos.ArticuloAEnviar();
				artE.setRef(e.getReferencia());
				artE.setCant(e.getCantidad());
				articuloAEnviar.add(artE);
			}
			EnvT.Articulos lista = new EnvT.Articulos();
			lista.setArticuloAEnviar(articuloAEnviar);
			envT.setArticulos(lista);
			marshaller.marshal(envT, System.out);
			String path = System.getProperty("user.home");
			marshaller.marshal(envT, new File(path+"/EnvT"+idTienda+numSolDist+".xml"));
			logger.log(Level.INFO, "Envio a tienda creado");

		} catch (JAXBException e) {
			logger.log(Level.ERROR, "Error en el XML", e);
		}

	}

}
